/**
 * @constructor
 * @param {number} val
 * @param {ListNode|null} [next]
 */
function ListNode(val, next) {
    /** @type {number} */
    this.val = (val === undefined ? 0 : val)
    /** @type {ListNode|null} */
    this.next = (next === undefined ? null : next)
}

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
    let pre = null //相当于另起一个新链表，维护pre一直保持在新链表头部
    let curr = head //遍历旧链表
    while (curr) {
        let nextTemp = curr.next //暂存与旧链表的联系
        curr.next = pre //把当前元素放到新链表头部
        pre = curr // 更新新链表头部，始终把pre作为头部，方便链接
        curr = nextTemp //拿回与旧链表的联系，继续遍历
    }
    return pre //返回链表头部
};